쿠키와 세션
쿠키와 세션은 HTTP 프로토콜의 특징이자 약점을 보완하기 위해 사용한다.
- Connectionless (비 연결성)
- 클라이언트가 서버에 요청(Request)를 보내면, 서버는 클라이언트에게 적절한 응답(Response)을 주고
연결(Connection)을 끊는 특성
- Stateless (무상태)
- 클라이언트와 서버의 연결을 끊는 순간, 클라이언트와 서버의 통신이 끝나며
상태 정보는 유지하지 않는 특성
두 특성에 따라 서버와 클라이언트의 통신은 연속적으로 이어지지 않고 한 번 통신이 되면 끊어지기 떄문에 클라이언트는 서버에 요청할 때 클라이언트의 인증 정보를 계속 제공해야 한다.
쿠키와 세션을 사용하지 않는다면 매 페이지를 이동할 때 마다 로그인을 해야하는 번거로운 과정이 생길 수 있는 것이다.
따라서 쿠키와 세션은 클라이언트의 정보 유지를 위해 사용
한다.
쿠키 (Cookie)
이미지 출처 : https://chrisjune-13837.medium.com/web-%EC%BF%A0%ED%82%A4-%EC%84%B8%EC%85%98%EC%9D%B4%EB%9E%80-aa6bcb327582
쿠키는 클라이언트 로컬(local)
에 저장되는 (key,value)
형식의 데이터 파일이다.
서버에서 응답할 때 HTTP Response Header에 set-cookie
속성을 추가하여 클라이언트에 쿠키를 제공한다.
클라이언트에서는 저장한 쿠키의 정보를 참조하거나 재사용 할 수 있다.
지속 쿠키 (Persistent Cookie)
지속 쿠키는 직접 삭제하기전까지 없어지지 않는 쿠키이다. 시간제한도 없고 브라우저가 꺼져도 없어지지 않는다는 특징이 있다.
Web Storage에서는 localStorage
에 해당된다.
세션 쿠키 (Session Cookie)
세션 쿠키는 시간제한은 없지만, 세션이 꺼지게 되면 없어진다는 특징을 가진다.
Web Storage에서는 SessionStorage
에 해당되며, 브라우저나 탭이 닫히는 경우 쿠키가 삭제된다.
쿠키의 특징
이름
,값
,만료일
,경로 정보
로 구성되어 있다.- 클라이언트에 최대 300개의 쿠키만 저장할 수 있다.
- 하나의 도메인 당 최대 20개의 쿠키를 가질 수 있다.
- 하나의 쿠키는 4KB(=4096byte)까지 저장할 수 있다.
사용 예시
- 로그인 상태 유지
- '다시 보지 않기' 체크
세션 (Session)
이미지 출처 : https://chrisjune-13837.medium.com/web-%EC%BF%A0%ED%82%A4-%EC%84%B8%EC%85%98%EC%9D%B4%EB%9E%80-aa6bcb327582
세션은 서버에 클라이언트의 상태 정보를 저장
하는 기술로, 방문자가 웹 서버에 접속해 있는 상태를 하나의 단위로 보고 그것을 세션이라고 한다.
세션의 정보는 브라우저를 닫거나, 서버에서 세션을 삭제할 때 삭제된다.
세션의 특징
- 웹 서버에
웹 컨테이너의 상태를 유지하기 위한 정보를 저장
한다. - 브라우저를 닫거나, 서버에서 세션을 삭제했을때만 삭제가 되므로, 쿠키보다 비교적 보안이 좋다.
- 서버 용량이 허용하는 한에서 저장 데이터의 제한이 없다.
- 각 클라이언트에 고유 Session ID를 부여한다.
세션은 쿠키보다 보안이 좋은데, 쿠키를 사용하는 이유
세션은 서버에 저장되며 서버자원을 사용하기 때문에 사용자가 많을 경우 소모되는 자원이 많아 서버에 과부하를 일으켜 속도 저하가 발생 할 수 있다. 그렇기 때문에 자원 관리 차원에서 쿠키와 세션을 적절한 요소 및 기능에 병행 사용 해야한다.
사용 예시
- 로그인 정보 유지
쿠키와 세션의 차이
쿠키(Cookie) | 세션(Session) | |
---|---|---|
저장 위치 | 클라이언트(=접속자 PC) | 웹 서버 |
저장 형식 | text(key-value) | Object |
만료 시점 | 쿠키 저장시 설정 | 서버에서 삭제 (기간 지정 가능) |
사용하는 자원 | 클라이언트 리소스 | 웹 서버 리소스 |
용량 제한 | 총 300개 하나의 도메인 당 20개 하나의 쿠키 당 4KB(=4096byte) | 서버가 허용하는 한 용량제한 없음 |
속도 | 세션보다 빠름 | 쿠키보다 느림 |
보안 | 세션보다 안 좋음 | 쿠키보다 좋음 |
면접에 나올 수 있는 질문
Q. 쿠키와 세션을 사용하는 이유
A. HTTP의 특성상 클라이언트에서 정보 유지가 어렵기 때문에 쿠키와 세션은 클라이언트의 정보 유지를 위해 사용한다.
Q. 쿠키와 세션의 차이점은?
A. 저장 위치, 저장 형식, 만료 시점, 사용 자원, 용량 제한, 속도, 보안에서 차이점이 있다.
Q. 세션은 보안에서 안전한가?
A. 세션 또한 하이재킹 등의 공격에 노출 될 수 있다. 하지만 쿠키는 클라이언트 로컬에 저장되기 때문에 변질되거나 스니핑 공격을 당할 위험이 커 쿠키보다는 보안이 좋다라고 할 수 있다.
보안과 관련되서는 코코야이야기님 tistory 블로그 - [시큐어코딩] 쿠키 및 세션관리 를 참조해봐도 좋을 것 같다.
참고
- chrisjune님 medium 블로그 - [WEB] 쿠키, 세션이란?
- devuna님 tistory 블로그 - [web] 쿠키(cookie)와 세션(session)의 개념/차이/용도/작동방식
- hahahoho5915님 tistory 블로그 - 쿠키(Cookie), 세션(Session) 특징 및 차이
기여자
Jongminfire
📦